#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <pthread.h>

void* myfunc(void* arg)
{
    printf("child pthread id:%lu\n", pthread_self());
    printf("child thread ...\n");
    for(int i=0; i<5; ++i)
    {
        printf("child i = %d\n", i);
    }
    return NULL;
}

int main(int argc, const char* argv[])
{
    pthread_t thid;
    int ret = pthread_create(&thid, NULL, myfunc, NULL);
    printf("parent pthread id: %lu\n", pthread_self());

    /* 注意:
        这里不能用exit函数退出线程，因为子线程和主线程在同一个进程中，
    如果使用exit函数将导致所以线程都退出。
        不推荐使用pthread_exit函数，因为异常退出可能会导致线程中某些资源
    没有释放（例如互斥锁，容易导致死锁）*/
    
    // 退出主线程，子线程不受影响
    pthread_exit(NULL);
    printf("parent thread ...\n");
    for(int i=0; i<3; ++i)
    {
        printf(" i = %d\n", i);
    }
    return 0;
}
